// build.rs
use std::{env, fs, path::PathBuf};

fn main() {
    // 让 Cargo 只在配置变化时重跑
    println!("cargo:rerun-if-changed=application.yml");

    // 源文件：项目根目录下的 application.yml
    let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
    let src = manifest_dir.join("application.yml");

    // 可能的目标目录：
    // 1) target/<profile>
    // 2) target/<target-triple>/<profile>   （交叉编译时）
    let target_dir = PathBuf::from(
        env::var("CARGO_TARGET_DIR")
            .ok()
            .unwrap_or_else(|| manifest_dir.join("target").to_string_lossy().into_owned()),
    );
    let profile = env::var("PROFILE").unwrap();      // "debug" 或 "release"
    let target_triple = env::var("TARGET").unwrap(); // 如 "x86_64-pc-windows-msvc"

    let mut candidates = vec![
        target_dir.join(&profile),
        target_dir.join(&target_triple).join(&profile),
    ];

    // 也把它放到 OUT_DIR（构建脚本专用目录），方便运行时代码通过 env! 读取
    let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
    candidates.push(out_dir.clone());

    // 依次尝试复制到存在的候选目录；如果不存在就跳过
    let mut copied_any = false;
    for dir in candidates {
        if dir.exists() {
            let dst = dir.join("application.yml");
            // 创建父目录（一般已存在，调用也安全）
            if let Some(parent) = dst.parent() { fs::create_dir_all(parent).ok(); }
            fs::copy(&src, &dst).expect("copy application.yml failed");
            println!("cargo:warning=Copied application.yml -> {}", dst.display());
            copied_any = true;
        }
    }

    // 如果两个 target 目录都还没生成（第一次构建早期阶段），至少复制一份到 OUT_DIR
    if !copied_any {
        let dst = out_dir.join("application.yml");
        if let Some(parent) = dst.parent() { fs::create_dir_all(parent).ok(); }
        fs::copy(&src, &dst).expect("copy to OUT_DIR failed");
        println!("cargo:warning=Copied application.yml -> {}", dst.display());
    }
}
